#pragma once
#include "OgreStableHeaders.h"
namespace OgreEx
{
	using Ogre::uint32;
class Address
{
public:
    /// constructor
    Address();
    /// equality operator
    bool operator==(const Address& rhs) const;
	bool operator< (const Address& rhs) const;
};

//------------------------------------------------------------------------------
/**
*/
inline
Address::Address()
{
    // empty
}

//------------------------------------------------------------------------------
/**
*/
inline
bool
Address::operator==(const Address& rhs) const
{
    return (this == &rhs);
}
//------------------------------------------------------------------------------
/**
*/
inline
bool
Address::operator<(const Address& rhs) const
{
    return ((uint32)(this) < (uint32)(&rhs));
}
//------------------------------------------------------------------------------

#define __DeclareAddress(CLASSNAME) \
public:\
    static CLASSNAME::Address s_address; \
    virtual const Address& GetAddress() const;\
private:

#define __ImplementAddress(CLASSNAME) \
    Address CLASSNAME::s_address; \
    const Address& CLASSNAME::GetAddress() const { return CLASSNAME::s_address; }

}